package com.company;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class MyIO {
    public static void main(String[] args) {
        //File f = new File("E:\\Project\\Javademo\\文档");     //指定目录

        Student stu = new Student("张三",15,10001);
        test3(stu);

        System.out.println(stu.getName());
    }


    //文本内容复制
    public static void test1() {
        try {
            //字节输入流
            FileInputStream in = new FileInputStream("E:\\Project\\Javademo\\文档\\test1.txt");
            //字节输出流，默认为false（重写），（true为追加）
            FileOutputStream out = new FileOutputStream("E:\\Project\\Javademo\\文档\\test2.txt", true);

            byte[] b = new byte[100];       //字节传冲数组，接收文件读取内容
            int len = 0;                    //确认每次读取内容长度
            while ((len = in.read(b)) != -1) {      //读取完毕返回-1，则退出循环
                String s = new String(b, 0, len);       //把每次读取内容转换成字符串
                out.write(s.getBytes(StandardCharsets.UTF_8));      //字符串以utf-8编码集转换成字节写入文件
                System.out.println(s);                  //打印每次读取的内容
            }

            in.close();             //关闭字节输入流
            out.close();            //关闭字节输出流

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //打印指定目录下，包含指定字符的所有文件
    public static void test2(File file) {
        if (file.isFile()) {            //如果是文件则打印其信息
            System.out.println("文件----" + file.getAbsolutePath());
        } else {
            //System.out.println("目录----" + file.getAbsolutePath());

            File[] files = file.listFiles(new FileFilter() {        //实现FileFilter接口进行过滤筛选
                @Override
                public boolean accept(File pathname) {              //筛选的逻辑实现
                    //System.out.println("--------" + pathname.getName());

                    if(pathname.isDirectory()){                     //如果是目录则进入数组，以便递归调用
                        return true;
                    }
                    if(pathname.getName().contains("test")){        //如果是符合要求的文件则进入数组，以便输出信息
                        return true;
                    }

                    return false;               //不符合要求的不进入数组
                }
            });

            if (files.length > 0 && files != null) {                //文件数组中存在信息，则进行递归调用

                for (File f : files) {
                    test2(f);
                }
            }
        }


    }

    //对象流
    public static void test3(Student stu){
        try {
            ObjectOutputStream outObj = new ObjectOutputStream(
                    new FileOutputStream("E:\\Project\\Javademo\\文档\\object1.dat"));

            //写出对象
            outObj.writeObject(stu);



        } catch (IOException e) {
            e.printStackTrace();
        }



        try {
            ObjectInputStream inObj = new ObjectInputStream(
                    new FileInputStream("E:\\Project\\Javademo\\文档\\object1.dat"));

            Student stu1 = (Student) inObj.readObject();
            System.out.println(stu1.toString());

            stu1.setName("123");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
